package vue.commun;

import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import metier.CategorieStage;
import metier.Stage;
import vue.eleve.JPanAffStageEleve;
import vue.stage.JPanAffStage;
import configuration.Constante;
import ctr.commun.CommunGest;
import ctr.eleve.GestAfficherStageEleve;
import ctr.stage.GestAfficheStage;

public class JPanOptionTri extends JPanel{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8689346723642580590L;
	
	private JTextField jTfAnnee;
	private JComboBox jComboBox;
	private Stage stage;
	private ButtonGroup triOrdonne;
	private ButtonGroup triSelecteur;
	
	private JRadioButton jRbNom;
	private JRadioButton jRbDateDeb;
	private JRadioButton jRbTriCroissant;
	private JRadioButton jRbTriDecroissant;
	private JRadioButton jRbTriDecroissantPrecedent;
	
	private JRadioButton jRbPrenom;
	private JRadioButton jRbDateNaissance;
	private JRadioButton jRbgrade;
	private JRadioButton jRbMoyenne;

	/**
	 * 
	 * @param true : stage | false : eleve
	 */
	public JPanOptionTri(boolean selecteur, JPanel jpanAppelant){
		JPanel optionTri = new JPanel();
		optionTri.setLayout(new BorderLayout());
		
		// Selection du stage
		CommunGest communGest = new CommunGest();
		ArrayList<CategorieStage> lCatStage = communGest.getListeCategorieStage();
		//Panel rechercher de stage
		JPanel rechercherStage = new JPanel();
		rechercherStage.setLayout(new BorderLayout());
		
		
		if ( !selecteur ){
			JButton bouton = new JButton("Afficher");
			// Panel saisie annee
			JPanel saisiAnnee = new JPanel();
			JLabel jLabelAnnee = new JLabel("Année");
			jTfAnnee = new JTextField();
			jTfAnnee.setName("Annee");
			
			Date date = (new Date());
			SimpleDateFormat maDateLongue;
			maDateLongue= new SimpleDateFormat("yyyy");
			jTfAnnee.setText(maDateLongue.format(date));
			
			saisiAnnee.add(jLabelAnnee);
			saisiAnnee.add(jTfAnnee);
			bouton.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
			saisiAnnee.add(bouton);
			rechercherStage.add(saisiAnnee, BorderLayout.NORTH);
		}
		
		
		// Panel saisie categorie
		JPanel saisiCategorie = new JPanel();
		jComboBox = new JComboBox(lCatStage.toArray());
		if (selecteur){
			jComboBox.addActionListener(new GestAfficheStage((JPanAffStage)jpanAppelant, this));
		}
		if (stage != null){
			jComboBox.setSelectedItem(stage);
		}else if ( !lCatStage.isEmpty()){
			jComboBox.setSelectedItem(lCatStage.get(0));
		}
		
		// TODO listener afficherStages
		JLabel jLabelCat = new JLabel("Catégorie");
		saisiCategorie.add(jLabelCat);
		saisiCategorie.add(jComboBox);
		rechercherStage.add(saisiCategorie, BorderLayout.SOUTH);

		optionTri.add(rechercherStage, BorderLayout.WEST);
		optionTri.add(new JSeparator(SwingConstants.VERTICAL));
		
		if ( selecteur ){
			optionTri.add(triStage(jpanAppelant), BorderLayout.CENTER);
		}else{
			optionTri.add(triEleve(jpanAppelant), BorderLayout.CENTER);
		}
		
		this.add(optionTri);
	}
	
	/**
	 * Creer les selecteurs de tri pour les stages
	 * @return
	 */
	public JPanel triStage(JPanel jpanAppelant){
		JPanel jOption = new JPanel();
		jOption.setLayout(new BorderLayout());
		
		// Option de tri Nom / Date Debut
		JPanel jPanOption = new JPanel();
		jPanOption.setLayout(new BorderLayout());
		
		// Creation bouton radios.
		jRbNom = new JRadioButton();
		jRbNom.setText("Nom");
		jRbNom.setName(Constante.RADIO_TRI_NOM);
		jRbNom.setSelected(true);
		jRbNom.addActionListener(new GestAfficheStage((JPanAffStage)jpanAppelant, this));
		jPanOption.add(jRbNom, BorderLayout.WEST);
		
		jRbDateDeb = new JRadioButton();
		jRbDateDeb.setText("Date Debut");
		jRbDateDeb.setName(Constante.RADIO_TRI_DATE_DEB);
		jRbDateDeb.addActionListener(new GestAfficheStage((JPanAffStage)jpanAppelant, this));
		jPanOption.add(jRbDateDeb, BorderLayout.EAST);
		triSelecteur = new ButtonGroup();
		triSelecteur.add(jRbNom);
		triSelecteur.add(jRbDateDeb);
		jOption.add(jPanOption, BorderLayout.NORTH);
		jOption.add(new JSeparator(SwingConstants.HORIZONTAL), BorderLayout.CENTER);
		
		// Option Tri Croissant / Decroissant
		JPanel jPanelOrdreTri = new JPanel();
		jPanelOrdreTri.setLayout(new BorderLayout());
		
		// Creation bouton radios.		
		jRbTriCroissant = new JRadioButton();
		jRbTriCroissant.setText("Croissant");
		jRbTriCroissant.setName(Constante.RADIO_TRI_CROISSANT);
		jRbTriCroissant.setSelected(true);
		jRbTriCroissant.addActionListener(new GestAfficheStage((JPanAffStage)jpanAppelant, this));
		jPanelOrdreTri.add(jRbTriCroissant, BorderLayout.WEST);
		
		jRbTriDecroissant = new JRadioButton();
		jRbTriDecroissant.setText("Decroissant");
		jRbTriDecroissant.setName(Constante.RADIO_TRI_DECROISSANT);		
		jRbTriDecroissant.addActionListener(new GestAfficheStage((JPanAffStage)jpanAppelant, this));
		jRbTriDecroissantPrecedent = new JRadioButton();
		jPanelOrdreTri.add(jRbTriDecroissant, BorderLayout.EAST);
		
		triOrdonne = new ButtonGroup();
		triOrdonne.add(jRbTriCroissant);
		triOrdonne.add(jRbTriDecroissant);
		
		jOption.add(jPanelOrdreTri, BorderLayout.SOUTH);
		return jOption;
	}
	
	/**
	 * Creer les selecteur de tri pour les eleves.
	 * @return
	 */
	public JPanel triEleve(JPanel jpanAppelant){
		JPanel jOption = new JPanel();
		jOption.setLayout(new BorderLayout());
		
		// Option de tri Nom / Date Debut
		JPanel jPanOption = new JPanel();
		jPanOption.setLayout(new BorderLayout());
		
		// Creation bouton radios.
		jRbNom = new JRadioButton();
		jRbNom.setText("Nom");
		jRbNom.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanOption.add(jRbNom, BorderLayout.WEST);
		
		jRbPrenom = new JRadioButton();
		jRbPrenom.setText("Prenom");
		jRbPrenom.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanOption.add(jRbPrenom, BorderLayout.CENTER);

		jRbDateNaissance = new JRadioButton();
		jRbDateNaissance.setText("Date Naissance");
		jRbDateNaissance.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanOption.add(jRbDateNaissance, BorderLayout.EAST);
		
		JPanel jPanOptionBis = new JPanel();
		jPanOptionBis.setLayout(new BorderLayout());
		
		jRbgrade = new JRadioButton();
		jRbgrade.setText("Grade");
		jRbgrade.setSelected(true);
		jRbgrade.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanOptionBis.add(jRbgrade, BorderLayout.WEST);
		
		jRbMoyenne = new JRadioButton();
		jRbMoyenne.setText("Moyenne");
		jRbMoyenne.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanOptionBis.add(jRbMoyenne, BorderLayout.CENTER);
		triSelecteur = new ButtonGroup();
		triSelecteur.add(jRbNom);
		triSelecteur.add(jRbPrenom);
		triSelecteur.add(jRbDateNaissance);
		triSelecteur.add(jRbgrade);
		triSelecteur.add(jRbMoyenne);
		
		jOption.add(jPanOption, BorderLayout.NORTH);
		jOption.add(jPanOptionBis, BorderLayout.CENTER);
		
		// Option Tri Croissant / Decroissant
		JPanel jPanelOrdreTri = new JPanel();
		jPanelOrdreTri.setLayout(new BorderLayout());
		
		// Creation bouton radios.		
		jRbTriCroissant = new JRadioButton();
		jRbTriCroissant.setText("Croissant");
		jRbTriCroissant.setSelected(true);
		jRbTriCroissant.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jPanelOrdreTri.add(jRbTriCroissant, BorderLayout.WEST);
		
		jRbTriDecroissant = new JRadioButton();
		jRbTriDecroissant.setText("Decroissant");
		jRbTriDecroissant.addActionListener(new GestAfficherStageEleve((JPanAffStageEleve)jpanAppelant, this));
		jRbTriDecroissantPrecedent = new JRadioButton();
		jPanelOrdreTri.add(jRbTriDecroissant, BorderLayout.EAST);
		
		triOrdonne = new ButtonGroup();
		triOrdonne.add(jRbTriCroissant);
		triOrdonne.add(jRbTriDecroissant);
		
		jOption.add(jPanelOrdreTri, BorderLayout.SOUTH);
		return jOption;
	}

	/**
	 * @return the jTfAnnee
	 */
	public JTextField getjTfAnnee() {
		return jTfAnnee;
	}

	/**
	 * @param jTfAnnee the jTfAnnee to set
	 */
	public void setjTfAnnee(JTextField jTfAnnee) {
		this.jTfAnnee = jTfAnnee;
	}

	/**
	 * @return the jComboBox
	 */
	public JComboBox getjComboBox() {
		return jComboBox;
	}

	/**
	 * @param jComboBox the jComboBox to set
	 */
	public void setjComboBox(JComboBox jComboBox) {
		this.jComboBox = jComboBox;
	}

	/**
	 * @return the stage
	 */
	public Stage getStage() {
		return stage;
	}

	/**
	 * @return the triOrdonne
	 */
	public ButtonGroup getTriOrdonne() {
		return triOrdonne;
	}

	/**
	 * @return the triSelecteur
	 */
	public ButtonGroup getTriSelecteur() {
		return triSelecteur;
	}

	/**
	 * @return the serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/**
	 * @return the jRbNom
	 */
	public JRadioButton getjRbNom() {
		return jRbNom;
	}

	/**
	 * @return the jRbDateDeb
	 */
	public JRadioButton getjRbDateDeb() {
		return jRbDateDeb;
	}

	/**
	 * @return the jRbTriCroissant
	 */
	public JRadioButton getjRbTriCroissant() {
		return jRbTriCroissant;
	}

	/**
	 * @return the jRbTriDecroissant
	 */
	public JRadioButton getjRbTriDecroissant() {
		return jRbTriDecroissant;
	}

	/**
	 * @return the jRbTriDecroissantPrecedent
	 */
	public JRadioButton getjRbTriDecroissantPrecedent() {
		return jRbTriDecroissantPrecedent;
	}

	/**
	 * @param jRbTriDecroissantPrecedent the jRbTriDecroissantPrecedent to set
	 */
	public void setjRbTriDecroissantPrecedent(
			JRadioButton jRbTriDecroissantPrecedent) {
		this.jRbTriDecroissantPrecedent = jRbTriDecroissantPrecedent;
	}

	/**
	 * @return the jRbPrenom
	 */
	public JRadioButton getjRbPrenom() {
		return jRbPrenom;
	}

	/**
	 * @return the jRbDateNaissance
	 */
	public JRadioButton getjRbDateNaissance() {
		return jRbDateNaissance;
	}

	/**
	 * @return the jRbgrade
	 */
	public JRadioButton getjRbgrade() {
		return jRbgrade;
	}

	/**
	 * @return the jRbMoyenne
	 */
	public JRadioButton getjRbMoyenne() {
		return jRbMoyenne;
	}
}
